package com.atguigu.items;

import org.jeasy.rules.api.Facts;
import org.jeasy.rules.api.Rules;
import org.jeasy.rules.api.RulesEngineParameters;
import org.jeasy.rules.core.DefaultRulesEngine;
import org.jeasy.rules.spel.SpELRule;

public class EvenryClient {
    //谁执行谁的功能
    public static void main(String[] args) {
        // 创建执行器参数
        RulesEngineParameters parameters = new RulesEngineParameters().skipOnFirstAppliedRule(true);
        // 创建执行期引擎
        DefaultRulesEngine discountEngine = new DefaultRulesEngine(parameters);
        // 链式规则完成接口规则的定义
        SpELRule spelRule = new SpELRule().name("1")
                .description("1")
                .priority(1)
                .when("#{ ['item'].price >= 400 }")
                .then("#{ ['item'].setExpression('折扣规则为8折 原价为:' + ['item'].price " +
                        "+ ' 折扣后的价格为：'" +
                        " + T(java.lang.Float).parseFloat(['item'].price * 0.8+'') )  }");
        // 添加规则
        Rules rules = new Rules();
        rules.register(spelRule);
        // 定义事实
        Facts facts = new Facts();
        // 添加事实
        Item item = new Item();
        item.setPrice(600);
        facts.put("item", item);
        // 触发引擎
        discountEngine.fire(rules, facts);
        System.out.println(item.getExpression());
    }
}
